/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.bs.extensoesSwing;

import java.awt.Color;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.Serializable;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.text.PlainDocument;

/**
 *
 * @author Bone
 */
public class CampoTexto extends JTextField implements Serializable {

    private DocumentFilter filter = new DocumentFilter();
    private String mascara = "";
    private int casasDecimais = 2;
    private boolean selecionarAoEntrar = true;
    private boolean iniciarZerado = true;

    public CampoTexto() {

        UIManager.put("TextField.inactiveForeground", Color.black);
        addFocusListener(new FocusAdapter() {
            @Override
            public void focusGained(FocusEvent e) {
                super.focusGained(e);
                filter.setFormatarString(false);
                if (selecionarAoEntrar) {
                    selectAll();
                }
            }

            @Override
            public void focusLost(FocusEvent e) {
                super.focusLost(e);
                filter.setFormatarString(true);
                setText(filter.validaConteudo(getText()));
            }
        });

        addKeyListener(new KeyListener() {
            public void keyTyped(KeyEvent e) {
            }

            public void keyPressed(KeyEvent e) {
            }

            public void keyReleased(KeyEvent e) {
                setText(filter.formatar(getText()));
            }
        });
    }

    public DocumentFilter getFilter() {
        return filter;
    }

    public void setFilter(DocumentFilter filter) {
        this.filter = filter;
        PlainDocument doc = new PlainDocument();
        doc.setDocumentFilter(filter);
        this.setDocument(doc);
        if (filter.getRegraDeValidacaoSelecionada() == DocumentFilter.OpcoesDeRegraDeValidacao.MONETARIO) {
            if (iniciarZerado) {
                setText("R$ 00.00");
            }
            setHorizontalAlignment(RIGHT);
        } else {
            setHorizontalAlignment(LEADING);
        }
    }

    public String getMascara() {
        if (filter.getRegraDeValidacaoSelecionada() == DocumentFilter.OpcoesDeRegraDeValidacao.DATA) {
            return "##/##/####";
        }
        return mascara;
    }

    public void setMascara(String mascara) {
        this.mascara = mascara;
        filter.setMascara(mascara);
    }

    public int getCasasDecimais() {
        return casasDecimais;
    }

    public void setCasasDecimais(int casasDecimais) {
        this.casasDecimais = casasDecimais;
        filter.setCasasDecimais(casasDecimais);
    }

    @Override
    public void setText(String t) {
        super.setText(t);
    }

    public boolean isSelecionarAoEntrar() {
        return selecionarAoEntrar;
    }

    public void setSelecionarAoEntrar(boolean selecionarAoEntrar) {
        boolean old = this.selecionarAoEntrar;
        this.selecionarAoEntrar = selecionarAoEntrar;
        firePropertyChange("selecionarAoEntrar", old, selecionarAoEntrar);
    }

    public boolean isIniciarZerado() {
        return iniciarZerado;
    }

    public void setIniciarZerado(boolean iniciarZerado) {
        boolean old = this.iniciarZerado;
        this.iniciarZerado = iniciarZerado;
        if(iniciarZerado){
            setText("R$ 00.00");
        }else{
            setText("");
        }
        firePropertyChange("iniciarZerado", old, iniciarZerado);
    }
    
}
